import storage from 'good-storage';

const SEARCH_KEY = '__search__';
const SEARCH_MAX_LENGTH = 15;
const PLAY_KEY = '__play__';
const PLAY_MAX_LENGTH = 200;
const FAVORITE_KEY = '__favorite__';
const FAVORITE_MAX_LENGTH = 200;

export function saveSearchArr(query) {
  // 取出本地存储
  let Sarr = storage.get(SEARCH_KEY, [])
  // 与数组对比
  let newArr = addSearchArr(Sarr, query, (item) => {
    return item === query
  }, SEARCH_MAX_LENGTH)
  // 存储本地
  storage.set(SEARCH_KEY, newArr)
  return newArr
}

/**
 * addSearchArr  与数组对比生成一个新的数组
 * arr 需要添加的数组
 * query 添加的数据
 * com 对比的方法
 * max 最大的条目限制
 */
function addSearchArr(arr, query, com, max) {
  // 查找是否有这条数据
  let index = arr.findIndex(com)
  // 如果有数据
  // 并且在第一个
  if (index === 0) {
    return arr
  }
  //如果不在第一个
  if (index > 0) {
    // 删除数据
    arr.splice(index, 1)
  }
  //如果没有数据
  // unshift() 方法可向数组的开头添加一个或更多元素，并返回新的长度。
  arr.unshift(query)
  //最后判断数据是否超过最大值
  if (max && arr.length > max) {
    //pop() 方法用于删除并返回数组的最后一个元素。
    arr.pop()
  }
  return arr
}

/**
 * loadSearch 调取本地数据 没有本地数据默认为空
 */
export function loadSearch() {
  return storage.get(SEARCH_KEY, [])
}

/**
 * delateOne 删除一条数据
 * query 需要删除的数据
 */
export function delateOne(query) {
  // 取出本地存储
  let Sarr = storage.get(SEARCH_KEY, [])
  let Darr = delateData(Sarr, (item) => {
    return item === query
  })
  //修改本地数据
  storage.set(SEARCH_KEY, Darr)
  return Darr
}

/**
 * delateData 找到数据并删除
 */
function delateData(arr, com) {
  let indxe = arr.findIndex(com)
  if (indxe > -1) {
    arr.splice(indxe, 1)
  }
  return arr
}

/**
 * allDelateFn 删除全部数据
 */

export function allDelateFn() {
  storage.remove(SEARCH_KEY)
  return []
}

export function savePlayArr(query) {
  // 取出本地存储
  let Sarr = storage.get(PLAY_KEY, [])
  // 与数组对比
  let newArr = addSearchArr(Sarr, query, (item) => {
    return item.id === query.id
  }, PLAY_MAX_LENGTH)
  // 存储本地
  storage.set(PLAY_KEY, newArr)
  return newArr
}


export function loadPlay() {
  return storage.get(PLAY_KEY, [])
}


export function saveFavoriteArr(query) {
  // 取出本地存储
  let Sarr = storage.get(FAVORITE_KEY, [])
  // 与数组对比
  let newArr = addSearchArr(Sarr, query, (item) => {
    return item === query
  }, FAVORITE_MAX_LENGTH)
  // 存储本地
  storage.set(FAVORITE_KEY, newArr)
  return newArr
}

/**
 * delateOneFavorite 删除一条数据
 * query 需要删除的数据
 */
export function delateOneFavorite(query) {
  // 取出本地存储
  let Sarr = storage.get(FAVORITE_KEY, [])
  let Darr = delateData(Sarr, (item) => {
    return item.id === query.id
  })
  //修改本地数据
  storage.set(FAVORITE_KEY, Darr)
  return Darr
}

/**
 * loadFavorite 调取本地数据 没有本地数据默认为空
 */
export function loadFavorite() {
  return storage.get(FAVORITE_KEY, [])
}